//package top.xierongsheng.user.controller;
//
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.Parameter;
//import io.swagger.v3.oas.annotations.Parameters;
//import io.swagger.v3.oas.annotations.enums.ParameterIn;
//import io.swagger.v3.oas.annotations.media.Content;
//import io.swagger.v3.oas.annotations.media.Schema;
//import io.swagger.v3.oas.annotations.responses.ApiResponse;
//import io.swagger.v3.oas.annotations.responses.ApiResponses;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.core.annotation.Order;
//import org.springframework.http.ResponseEntity;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import top.xierongsheng.code.BaseVo;
//import top.xierongsheng.code.CacheVariable;
//import top.xierongsheng.code.R;
//import top.xierongsheng.code.ResultVo;
//import top.xierongsheng.code.aspect.log.Log;
//import top.xierongsheng.code.aspect.log.LogType;
//import top.xierongsheng.code.aspect.power.RequiresPermissions;
//import top.xierongsheng.code.redis.RedisService;
//import top.xierongsheng.user.dto.LoginDto;
//import top.xierongsheng.user.dto.UserDto;
//import top.xierongsheng.user.dto.groups.Create;
//import top.xierongsheng.user.dto.groups.ResetPwd;
//import top.xierongsheng.user.dto.groups.Update;
//import top.xierongsheng.user.dto.groups.UpdateStatus;
//import top.xierongsheng.user.model.SYS_USER;
//import top.xierongsheng.user.service.IUserService;
//import top.xierongsheng.utlis.data.RandomUtil;
//
//import java.util.*;
//
//@Slf4j
//@RestController //这意味着这个类是一个控制器
//@RequestMapping(path = "/user") //这意味着URL以/user开头（在应用程序路径之后）
//@CrossOrigin
//@RequiredArgsConstructor
//@Tag(name = "用户接口")
//public class UserController {
//
//    private final IUserService userService;
//
//    private final RedisService redisService;
//
//
//    /**
//     * 测试
//     *
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/12 16:13
//     */
//    @PostMapping(path = "test", consumes = {"application/json"})
//    @Operation(summary = "测试")
//    public BaseVo<UserDto> Test(@RequestBody @Validated(ResetPwd.class) UserDto userDt) {
//        //这边需要获取到userId 我需要怎么获取
//        //SYS_USER user = new SYS_USER();
//
//        //return new BaseVo<UserDto>(200, userDt, "成四大皆空");
//        return BaseVo.ok(userDt);
//    }
//
//    /**
//     * 测试
//     *
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/12 16:13
//     */
//    @PostMapping(path = "test2", consumes = {"application/json"})
//    @Operation(summary = "测试2")
//    public ResultVo Test2(@RequestBody @Validated(ResetPwd.class) LoginDto loginDto) {
//        //这边需要获取到userId 我需要怎么获取
//        //SYS_USER user = new SYS_USER();
//
//        //return new BaseVo<UserDto>(200, userDt, "成四大皆空");
//        return ResultVo.ok().data(loginDto);
//    }
//
//    /**
//     * 测试
//     *
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/12 16:13
//     */
//    @PostMapping(path = "test3", consumes = {"application/json"})
//    @Operation(summary = "测试3")
//    public R Test3(@RequestBody @Validated(ResetPwd.class) LoginDto loginDto) {
//        //这边需要获取到userId 我需要怎么获取
//        //SYS_USER user = new SYS_USER();
//
//        //return new BaseVo<UserDto>(200, userDt, "成四大皆空");
//        return R.ok("新增用户成功").zip("data",loginDto);
//    }
//
//
//
//
//    /**
//     * 新增用户
//     *
//     * @param userId 用户Id
//     * @auther 谢荣生
//     * @datetime 2020/4/21 17:01
//     * return R
//     */
//    @PostMapping(path = "/addUser", consumes = {"application/json", "application/x-www-form-urlencoded"})  //仅映射POST请求
//    @Log(type = LogType.web, desc = "用户表-新增")
//    @RequiresPermissions("addUser")
//    @Operation(summary = "新增用户")
//    @Parameters({
//            @Parameter(name = "userId", description = "用于请求的用户id", required = true, in = ParameterIn.HEADER),
//    })
//    @ApiResponses(value = {
//            @ApiResponse(responseCode = "200", description = "成功响应",
//                    content = {@Content(mediaType = "application/json", schema = @Schema(implementation = SYS_USER.class))}),
//    })
//    public R addUser(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(Create.class) UserDto userDto) {
//        SYS_USER user = new SYS_USER();
//        user.setId(RandomUtil.getUUID());
//        user.setAccount(userDto.getAccount());
//        user.setPassword(userDto.getPassword());
//        user.setName(userDto.getName());
//        user.setNickname(userDto.getNickname());
//        user.setStatus(1);
//        user.setRoleId(userDto.getRoleId());
//        user.setIdCard(userDto.getIdCard());
//        user.setPhone(userDto.getPhone());
//        user.setSex(userDto.getSex());
//        user.setAreaDesc(userDto.getAreaDesc());
//        user.setAreaId(userDto.getAreaId());
//        user.setCreatorId(userId);
//        user.setCreateTime(new Date());
//        user.setUpdateId(userId);
//        user.setUpdateTime(new Date());
//        userService.save(user);
//        return R.ok("新增用户成功");
//    }
//
//    /**
//     * 更新用户信息
//     *
//     * @param userId 用户Id
//     * @auther 谢荣生
//     * @datetime 2020/4/21 16:59
//     */
//    @PostMapping(path = "/updateUser", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "用户表-更新")
//    @RequiresPermissions("editUser")
//    @Operation(summary = "编辑用户")
//    public R updateUser(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(Update.class) UserDto userDto) {
//        SYS_USER sysUser = userService.getById(userDto.getId());
//        if (sysUser == null) {
//            return R.fail("用户不存在");
//        }
//        sysUser.setAccount(userDto.getAccount());
//        sysUser.setPassword(userDto.getPassword());
//        sysUser.setName(userDto.getName());
//        sysUser.setNickname(userDto.getNickname());
//        sysUser.setStatus(userDto.getStatus());
//        sysUser.setUpdateId(userId);
//        sysUser.setUpdateTime(new Date());
//        sysUser.setRoleId(userDto.getRoleId());
//        sysUser.setIdCard(userDto.getIdCard());
//        sysUser.setPhone(userDto.getPhone());
//        sysUser.setSex(userDto.getSex());
//        sysUser.setAreaDesc(userDto.getAreaDesc());
//        sysUser.setAreaId(userDto.getAreaId());
//        userService.updateById(sysUser);
//
//        Object userInfo = redisService.get(CacheVariable.USER + userDto.getId());
//        if (userInfo != null) {
//            long expire = redisService.getKeyExpire(CacheVariable.USER + userDto.getId());
//            redisService.set(CacheVariable.USER + sysUser.getId(), sysUser, expire > 0 ? expire : CacheVariable.USER_EXPIRE);
//        }
//        return R.ok("更新用户信息成功");
//    }
//
//    /**
//     * 批量 删除/禁用/启用 用户
//     *
//     * @param userId 操作用户id
//     * @auther 谢荣生
//     * @datetime 2020/4/21 17:00
//     */
//    @PostMapping(path = "/delAndDisableAndEnableByIds", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "用户表—状态更新")
//    @RequiresPermissions("editUserStatus")
//    @Operation(summary = "批量更新用户状态")
//    public R delAndDisableAndEnableByIds(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(UpdateStatus.class) UserDto userDto) {
//        List<String> ids = Arrays.asList(userDto.getId().split(","));
//        List<String> errMap = new ArrayList<String>();
//        for (String id : ids) {
//            SYS_USER sysUser = userService.getById(id);
//            if (sysUser == null) {
//                errMap.add("[" + id + "]该用户不存在");
//                continue;
//            }
//            sysUser.setId(id);
//            sysUser.setUpdateId(userId);
//            sysUser.setUpdateTime(new Date());
//            sysUser.setStatus(userDto.getStatus());
//            userService.updateById(sysUser);
//        }
//        if (errMap.size() > 0) {
//            return R.fail("用户状态更新失败").zip("data", errMap);
//        } else {
//            return R.ok("用户状态更新成功");
//        }
//    }
//
//
//    /**
//     * 分页获取用户列表
//     *
//     * @param userId
//     * @param areaId
//     * @param roleId
//     * @param sex
//     * @param status
//     * @param key
//     * @param pageNo
//     * @param pageSize
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/6 17:30
//     */
//    @GetMapping(path = "/getUserListPage")
//    @RequiresPermissions("searchUser")
//    @Operation(summary = "分页查询获取用户列表")
//    public R getUserListPage(@RequestHeader(name = "userId") String userId, @RequestParam Integer areaId, @RequestParam String roleId, @RequestParam Integer sex, @RequestParam Integer status, @RequestParam String key, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize) {
//        Integer localAreaId = areaId;
//        if (areaId != null) {
//            if (areaId.toString().length() == 6 && !areaId.toString().trim().equals("000000")) {
//                if (areaId.toString().substring(2, 6).equals("0000")) {
//                    localAreaId = Integer.valueOf(areaId.toString().substring(0, 2));
//                } else if (areaId.toString().substring(4, 6).equals("00")) {
//                    localAreaId = Integer.valueOf(areaId.toString().substring(0, 4));
//                }
//            }
//        }
//        IPage<HashMap> page = userService.getUserListPage(new Page<>(pageNo, pageSize), roleId, localAreaId, sex, status, key);
//        List<HashMap> userIPage = page.getRecords();
//        Map baseReturn = new HashMap();
//        baseReturn.put("pageNo", page.getCurrent());
//        baseReturn.put("pageSize", page.getSize());
//        baseReturn.put("total", page.getTotal());
//        baseReturn.put("list", userIPage);
//        return R.ok().zip("data", baseReturn);
//    }
//
//    /**
//     * 根据用户id获取用户信息
//     *
//     * @param userId
//     * @param id
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/20 10:25
//     */
//    @GetMapping(path = "/getUserInfoById")
//    @Operation(summary = "根据用户ID获取用户信息")
//    public R getUserInfoById(@RequestHeader(name = "userId") String userId, @RequestParam String id) {
//        if (id == null || id.trim().isEmpty()) {
//            return R.fail("id不允许为空");
//        }
//        SYS_USER user = userService.getById(id);
//        if (user == null) {
//            return R.fail("用户不存在");
//        } else {
//            return R.ok("获取用户信息成功").zip("data", user);
//        }
//    }
//
//    /**
//     * 批量重置密码
//     *
//     * @param userId
//     * @param userDto
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/12 16:13
//     */
//    @PostMapping(path = "resetPwd", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @RequiresPermissions("resetPwd")
//    @Log(type = LogType.web, desc = "用户表-重置密码")
//    @Operation(summary = "重置密码")
//    public R resetPwd(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(ResetPwd.class) UserDto userDto) {
//        List<String> ids = Arrays.asList(userDto.getId().split(","));
//        List<String> errMap = new ArrayList<String>();
//        for (String id : ids) {
//            SYS_USER sysUser = new SYS_USER();
//            sysUser.setId(id);
//            sysUser.setUpdateId(userId);
//            sysUser.setUpdateTime(new Date());
//            sysUser.setPassword("4SWD4G6P4M");
//            boolean b = userService.updateById(sysUser);
//            if (!b) {
//                errMap.add("[" + id + "]该用户不存在");
//            }
//        }
//        if (errMap.size() > 0) {
//            return R.fail("用户密码重置失败").zip("data", errMap);
//        } else {
//            return R.ok("用户密码重置成功");
//        }
//    }
//}
